/**
 * @file 轨迹动画控制Hook
 * @description 提供轨迹播放、暂停、继续、停止等动画控制功能
 * @date 2024-08-20
 */

// @ts-ignore - uni-app环境下Vue导入需要忽略类型检查
import { ref } from 'vue';
import { logger } from '@/utils/system/logger';

/**
 * 轨迹动画控制Hook
 * @returns 轨迹动画控制相关方法和状态
 */
export function useTrackAnimation() {
  // 轨迹实例引用
  const trackLine = ref<any>(null);
  
  /**
   * 设置轨迹线实例
   */
  function setTrackLine(line: any): void {
    trackLine.value = line;
  }
  
  /**
   * 轨迹动画控制 - 开始
   */
  function startAnimation(): void {
    if (!trackLine.value) return;
    
    try {
      trackLine.value.startAnimation();
    } catch (err) {
      logger.error('开始轨迹动画失败', err, { component: 'useTrackAnimation' });
      uni.showToast({
        title: '轨迹播放失败',
        icon: 'error',
        duration: 2000
      });
    }
  }
  
  /**
   * 轨迹动画控制 - 暂停
   */
  function pauseAnimation(): void {
    if (!trackLine.value) return;
    
    try {
      trackLine.value.pauseAnimation();
    } catch (err) {
      logger.error('暂停轨迹动画失败', err, { component: 'useTrackAnimation' });
    }
  }
  
  /**
   * 轨迹动画控制 - 继续
   */
  function resumeAnimation(): void {
    if (!trackLine.value) return;
    
    try {
      trackLine.value.resumeAnimation();
    } catch (err) {
      logger.error('继续轨迹动画失败', err, { component: 'useTrackAnimation' });
    }
  }
  
  /**
   * 轨迹动画控制 - 停止/重置
   */
  function stopAnimation(): void {
    if (!trackLine.value) return;
    
    try {
      trackLine.value.stopAnimation();
    } catch (err) {
      logger.error('停止轨迹动画失败', err, { component: 'useTrackAnimation' });
    }
  }
  
  /**
   * 清除轨迹
   * @param trackInstance 轨迹视图实例
   */
  function clearTrack(trackInstance: any): void {
    if (!trackInstance) return;
    
    try {
      trackInstance.clear();
      trackLine.value = null;
    } catch (err) {
      logger.error('清除轨迹失败', err, { component: 'useTrackAnimation' });
    }
  }
  
  return {
    trackLine,
    setTrackLine,
    startAnimation,
    pauseAnimation,
    resumeAnimation,
    stopAnimation,
    clearTrack
  };
} 